﻿/**
 * 基于 CkEditor 的 Html 编辑器。
 */
Ext.define('Happy.form.field.CkEditor', {
    extend: 'Ext.form.field.Base',
    alias: 'widget.happy-ckeditor',

    /**
     * @cfg 重写 ExtJs。
     */
    inputType: 'textarea',
    /**
     * @cfg 重写 ExtJs。
     */
    height: 390,
    /**
     * @cfg ckeditor 工具栏高度，CKEDITOR.replace 中配置的 height 必须减去这个值。
     */
    toolbarHeight: 140,

    /**
     * @cfg {Object} editorConfig CKEDITOR.replace 方法的第二个参数。
     */

    /**
     * 重写 ExtJs。
     * 
     * @protected
     */
    onRender: function () {
        var me = this;

        me.callParent(arguments);

        me.configHtmlEditor();
    },

    /**
     * 配置 Html 编辑器。
     * 
     * @protected
     */
    configHtmlEditor: function () {
        var me = this;

        var editorConfig = Ext.apply({
            baseFloatZIndex: 20000,
            height: me.getHeight() - me.toolbarHeight,
            readOnly: me.readOnly || me.disabled,
            customConfig: '/CkEditor/custom_config.js'
        }, me.editorConfig || {});

        CKEDITOR.replace(me.getInputId(), editorConfig);
        me.getHtmlEditor().setData(me.value);
    },

    /**
     * 返回 CkEditor 的实例。
     * 
     * @private
     * @return {CKEDITOR}
     */
    getHtmlEditor: function () {
        var me = this;

        return CKEDITOR.instances[me.getInputId()];
    },

    /**
     * 重写 ExtJs。
     */
    getValue: function () {
        var me = this;

        if (me.getHtmlEditor()) {
            return me.getHtmlEditor().getData();
        }
        else {
            return me.callParent([value]);
        }
    },

    /**
     * 重写 ExtJs。
     */
    setValue: function (value) {
        var me = this;

        me.callParent([value]);

        if (me.getHtmlEditor()) {
            me.getHtmlEditor().setData(value);
        }
    },

    /**
     * 重写 ExtJs。
     */
    setReadOnly: function (readOnly) {
        var me = this;

        me.callParent(arguments);

        if (me.getHtmlEditor()) {
            me.getHtmlEditor().setReadOnly(me.readOnly || me.disabled);
        }
    },

    /**
     * 重写 ExtJs。
     */
    disable: function () {
        var me = this;

        me.callParent(arguments);

        if (me.getHtmlEditor()) {
            me.getHtmlEditor().setReadOnly(me.readOnly || me.disabled);
        }

        return me;
    },

    /**
     * 重写 ExtJs。
     */
    enable: function () {
        var me = this;

        me.callParent(arguments);

        if (me.getHtmlEditor()) {
            me.getHtmlEditor().setReadOnly(me.readOnly || me.disabled);
        }

        return me;
    }
});